Many applications today utilise peer-to-peer (P2P) technology to provide robust, low-cost, scalable delivery of content to end-users. P2P technology is built upon the concept of cooperative peers that share part of their resources with a community in exchange for a service or access to content.
Initially utilised for illegal file sharing, P2P is today utilised for delivery of legal media content on the Internet (e.g. BBC's iPlayer, Joost), telephony (e.g. Skype), free software (e.g. distribution of Linux live CD's over BitTorrent), and service packages (delivery of Microsoft patches over BitTorrent), among others. More and more service providers are realising the benefits of the P2P delivery model, resulting in a general shift towards this type of architecture.
The success of P2P technology is mainly due to its low cost and high scalability. Providers of content have a near-zero cost for delivery of large amounts of data to a large community of users.
In the classical client-server model, the resources on the server side need to be dimensioned to accommodate the total number of simultaneous users of the service. This includes processing power, memory capacity, streaming capacity, read/write speed, bandwidth among others. Conversely, when P2P technology is used, each peer donates part of its resources for the overall good of the network. In order to enable the nodes that would have been clients under the client server model to carry out this function, specific client application software needs to be developed. Different applications generally have different requirements, and different application-specific software generally needs to be installed in a client computer for each application that uses P2P technology.
The development of a peer-to-peer application is not a simple task. Many different companies and open source communities have developed their own proprietary peer-to-peer protocol. These protocols are not interoperable. Efforts to standardise a peer-to-peer protocol have started recently, since electronic vendors (e.g. Set Top Box (STB) vendors) wish to connect their devices to P2P networks, and they cannot implement dozens of different protocols in their equipment which typically possesses very limited resources.
If a service provider wants to utilise P2P technologies, a lot of functions need to be handled by the client applications. This means that “special” software clients need to be implemented to accommodate the needs of a P2P mechanism. Currently, a service provider cannot deliver content using a P2P system without requiring users to install a P2P client. The design and development of new P2P clients is a very time consuming task, and the new applications need to implement a lot of functions already implemented by other applications in the client. This is clearly wasteful and costly.
FIG. 1 illustrates some of these functions. Consider a client in a network, and suppose a P2P application 101 is installed on the client. The P2P application 101 needs to control and manage the sockets 111, 112, 113, 114 in the transport layer 102 open to other peers 121, 122, 123, 124. For efficiency reasons this process needs to be multi-threaded, and thus is very error prone. Moreover, the application 101 needs to pull data from different peers (control of data flow) and, since the pieces can come out of order the application must put them together in a structured way. Furthermore, the application 101 needs to ensure availability of content, which again implies that it needs to perform peer management by taking a close look at the connections' characteristics.
Since these functions need to be implemented by all P2P applications, most of which are different, many separate non-standardized protocols exist. Furthermore, any new P2P application needs to re-implement all these functions even though other applications on a client computer may already be doing so.
It would therefore be desirable to provide a mechanism to allow applications to utilise P2P technologies in a simpler way.